

import Utils from './utils';
import Config from './config.json';

/**
 * 公用的TTS(Text To Speech)转换函数，以HTTP FORM的方式提交TTS参数，并下载转换后的音频。
 *
 * @param {Object} options - TTS转换所需的参数，详细如下：
 * @param {string} options.uid - TTS转换所需的uid
 * @param {string} options.appkey - TTS转换所需的appKey
 * @param {string} options.sig - TTS转换所需的sig
 * @param {string} options.timestamp - TTS转换所需的timestamp
 * @param {string} options.text - 要转换的文本
 * @param {string} options.coreType - 要使用的TTS内核
 * @param {string} options.resource - 要使用的TTS资源
 * @return {int} - 会直接下载转换后的音频，如有其它需求，可以参考这个函数实现，用http post的方式来模拟。
 */
export function tts(options) {
    var x = this;
    if (typeof options == "undefined" ||
        typeof options.uid == "undefined" ||
        typeof options.appkey == "undefined" ||
        typeof options.timestamp == "undefined" ||
        typeof options.sig == "undefined" ||
        typeof options.text == "undefined" ||
        typeof options.coreType == "undefined" ||
        typeof options.resource == "undefined") {

        console.error(options);

        x.options.onError("tts failed, check param options plz", options);
        return false;
    }

    var url = Config.tts_url + "/" + options.coreType + "/" + options.resource;

    options.ip = "1.1.1.1";
    options.audio_type = "mp3";
    options.channel = 1;
    options.sample_rate = 16000;
    options.sample_bytes = 2;
    options.request = '{"refText": "' + options.text + '"}';

    delete options.coreType;
    delete options.resource;
    delete options.text;

    var tmp_form = document.getElementById('frmTTS');

    if (tmp_form) {
        tmp_form.parentNode.removeChild(tmp_form);
    }

    tmp_form = document.createElement("form");
    tmp_form.id = 'frmTTS';

    tmp_form.style.display = 'none';

    tmp_form.setAttribute('action', url);
    tmp_form.setAttribute('enctype', 'multipart/form-data');
    tmp_form.setAttribute('method', 'POST');
    tmp_form.setAttribute('target', '_SELF');

    for (var param in options) {
        var tmp_input = document.createElement('input');
        tmp_input.setAttribute('name', param);
        tmp_input.setAttribute('value', options[param]);

        tmp_form.appendChild(tmp_input);
    }

    document.body.appendChild(tmp_form);
    tmp_form.submit();

    return false;
}

/**
 * 通用的获取sig和timestamp的请求函数, 在html5和flash模式下都在使用。
 */
export function get_sig(params) {
    let data = null;
    if (!this.options.sigurl || this.options.sigurl == '') {
        this.options.onError('sigurl not set!');
    } else {
        Utils.ajax({
            url: this.options.sigurl,
            async:false,
            querystring: `alg=${this.options.alg}`,
            type: 'POST',
            dataType: 'json',
            success: (json) => {
              data = json;
            },
            error: (err) => {
                this.options.onError(`{id 72002,message:get sig failed,sigurl:"${this.options.sigurl}", caused by: ${err}}`);
            }
        });
    }
    return data;
};
